package com.bestcem.xm.user.dao.mapper;

import com.bestcem.xm.user.entity.mysql.UserUserGroup;
import com.bestcem.xm.user.entity.pojo.UserUserGroupDO;
import com.bestcem.xm.user.entity.pojo.UserWithGroupDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author Linked <zhijian.lin@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/31 15:53
 */
@Mapper
public interface UserUserGroupMapper {

    /**
     * 为当前组织添加账号
     *
     * @param userUserGroupDO
     * @return
     */
    Integer saveUserToGroup(UserUserGroupDO userUserGroupDO);

    /**
     * 批量插入用户关联组织
     *
     * @param userUserGroups 用户关联组织数据
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/7/4 19:45
     */
    Integer insertUserGroupList(List<UserUserGroup> userUserGroups);

    /**
     * 根据组织id查找关联的账号
     *
     * @param id
     * @return
     */
    List<String> getUserIdsByGroupId(String id);

    /**
     * 根据组织id列表查找关联的账号
     *
     * @param size
     * @param offset
     * @param groupIds
     * @return java.util.List<java.lang.String>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/1/26 15:35
     */
    List<String> getUserIdsByGroupIds(@Param("size") int size, @Param("offset") int offset, List<String> groupIds);

    /**
     * 查询当前组织列表下的所有账号数量
     *
     * @param groupIds 用户组id列表
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/7/4 16:34
     */
    Integer getUserCountByGroupIds(List<String> groupIds);

    /**
     * 根据条件查询账号与组织的关系
     *
     * @param param
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/1/4 13:50
     */
    List<UserUserGroup> selectBySelective(UserUserGroup param);

    /**
     * 根据相关字段查询用户与组织的关联关系
     *
     * @param userId       用户id
     * @param groupIdsList 组织id列表
     * @return java.util.List<com.bestcem.xm.user.group.entity.mysql.UserUserGroup>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/01/24 13:42
     */
    List<UserUserGroup> listByUserIdAndGroupIds(@Param("userId") String userId, @Param("groupIdsList") List<String> groupIdsList);

    /**
     * 更新所有数据的时间
     *
     * @param userId          用户id
     * @param alreadyGroupIds 组织id列表
     * @param operateTime     操作时间
     * @return int
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/01/24 14:21
     */
    int updateOperateTime(@Param("userId") String userId, @Param("alreadyGroupIds") List<String> alreadyGroupIds,
                          @Param("updateTime") Date operateTime);

    /**
     * 根据userId查询关联的groupId列表
     *
     * @param userId
     * @return java.util.List<java.lang.String>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/2/11 0:00
     */
    List<String> getGroupIds(@Param("userId") String userId);

    /**
     * 获取当前组已经存在的指定用户id列表
     *
     * @param groupId 用户组id
     * @param userIds 用户id列表
     * @return java.util.List<java.lang.String>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/04/18 15:41
     */
    List<String> selectUserIdsByGroupIdAndUserIds(@Param("groupId") String groupId, @Param("userIds") List<String> userIds);

    /**
     * 查询对应的用户数量
     *
     * @param groupIds 组织id列表
     * @return java.util.List<com.bestcem.xm.user.group.entity.mysql.UserUserGroup>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/02/08 14:15
     */
    List<UserUserGroup> countUserNumByGroupIds(@Param("groupIds") List<String> groupIds);

    long selectCountUserNum(@Param("groupId") String groupId, @Param("groupLevelId") String groupLevelId);

    /**
     * 根据rootGroupID、UserID、groupID获取用户组关联信息列表
     *
     * @param userUserGroupDO 前端传入的usergroup
     * @param offset          页数
     * @param size            分页大小
     * @return List<UserUserGroupDTO>
     * @author yanjishuo <jishuo.yan@idiaoyan.cn>
     * @date 2022/01/25 14:00
     */
    List<UserUserGroup> getByEachId(@Param("userUserGroupDO") UserUserGroupDO userUserGroupDO, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 查询用户所关联的组织信息
     *
     * @param userId 用户id
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserWithGroupDO>
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/03/25 19:14
     */
    List<UserWithGroupDO> getUserWithGroup(@Param("userId") String userId);

    /**
     * 根据相关字段删除关联的组织信息
     *
     * @param userGroup 参数信息
     * @param userIds   用户id列表
     * @return java.lang.Integer
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/04/29 16:39
     */
    Integer deleteBySelective(@Param("userGroup") UserUserGroup userGroup, @Param("userIds") List<String> userIds);

    /**
     * 根据查询条件查询满足的数据的条数
     *
     * @param userUserGroupDO 查询条件
     * @return java.lang.Long 满足数据的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/07/04 15:36
     */
    Long count(UserUserGroupDO userUserGroupDO);

    Integer getUserCountByGroupId(@Param("groupId") String groupId);

    void deleteByUserIdAndGroupId(String user_id, String group_id);

    /**
     * 插入用户关联组织
     *
     * @param userUserGroup 用户关联组织数据
     */
    Integer insert(UserUserGroup userUserGroup);
}
